with Ada.Command_Line;         use Ada.Command_Line;
with Ada.Exceptions;           use Ada.Exceptions;
with Ada.Text_IO;              use Ada.Text_IO;
with TJa.Sockets;              use TJa.Sockets;
with TJa.Calendar;             use TJa.Calendar;
with Protocol;                 use Protocol;
with Ada.Strings.Unbounded;    use Ada.Strings.Unbounded;

procedure client is

   Time : Date_And_Time_Type;

   -- Socket_Type används för att kommunicera
   -- med en server

   Socket : Socket_Type;

   -- Text - används för att lagra en textrad
   -- Textlangd - radens längd
   -- Resultat - resultatet från servern

   Text : String(1..100);
   Textlangd : Natural;
   Resultat : Natural;
   Userid : String(1..5) := "12346";
   Password : String(1..5) := "tomte";
   M_Type : Character := 'N';
   Name : Unbounded_String;

begin
   Insert(Name, 1,  "kanelbanan");
   Put_Line(To_string(Create_Message(M_type, Name)));
   -- Kontrollerar att programmet startas med
   -- två parametrar (serverdator och portnummer
   -- i detta fall). Annars kastas ett fel.
   -- Starta programmet enligt:
   -- klient zaza12 3400
   -- klient localhost 3400


   if Argument_Count /= 2 then
      Raise_Exception(Constraint_Error'Identity,
                      "Usage: " & Command_Name &
                        " serverhost serverport");
   end if;

   -- Initierar en socket, detta krävs för att
   -- kunna ansluta denna till servern.

   Initiate(Socket);

   -- Ansluter till servern

   Connect(Socket, Argument(1),
           Positive'Value(Argument(2)));
   loop
--        loop
--           Clock(Time);
--           Put(Get_Time(Time));
--           Put(" ");
--           Put(M_Type);
--           Put(" ");
--           Put(Name);
--           New_Line;

--           exit;
--        end loop;
--        Put ("exit => stop");
--        New_Line;
      Put_Line (Socket, Userid);
      Put_Line (Socket, Password);
      Get_Line (Socket, Text, Textlangd);
      if Text(1..2) = "OK" then
         Put_Line ("OK");
      else
         Put_Line ("REJECTED");
      end if;
      Put_Line(Socket, To_String(Get_Time(Time)) & " N Blixten");
      Get_Line (Socket, Text, Textlangd);
      Put_Line(Text);
      Get_Line (Socket, Text, Textlangd);
      exit;
   end loop;
--        exit when Text(1..4) = "exit";

     --   --Läser in en sträng från användaren
--        Put_Line("Mata in, ""exit"" => stop");
--        Get_Line(Text, Textlangd);
--        if Textlangd=100 then
--           Skip_Line;
--        end if;
--        exit when Text(1..4) = "exit";
--        -- Skicka strängen till servern
--        Put_Line(Socket, Text(1..Textlangd));
--        -- Vänta på att få tillbaka resultatet
--        Get(Socket, Resultat);
--        Skip_Line(Socket);
--        -- Skriv ut på skärmen
--        Put("Strängen innehöll");
--        Put(Integer'Image(Resultat));
--        Put_Line(" st E");'

   -- Innan programmet avslutar stängs socketen
   -- (bryts kontakten), detta genererar ett
   -- undantag (exception) hos servern.
--     delay (6.0);
   Close(Socket);
   -- På motsvarande sätt skulle denna klient
-- kunna få ett undantag om servern bryter
-- förbindelsen
end client;

